package cl.fcbarcelona.ejb.services;

import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import cl.fcbarcelona.customExceptions.BorrarContratoException;
import cl.fcbarcelona.customExceptions.EliminarSocioException;
import cl.fcbarcelona.model.dao.ContratoDAO;
import cl.fcbarcelona.model.dao.DatoContactoDAO;
import cl.fcbarcelona.model.dao.NacionalidadDAO;
import cl.fcbarcelona.model.dao.SocioDAO;
import cl.fcbarcelona.model.dto.ContratoDTO;
import cl.fcbarcelona.model.dto.DatoContactoDTO;
import cl.fcbarcelona.model.dto.NacionalidadDTO;
import cl.fcbarcelona.model.dto.SocioDTO;

/**
 * Session Bean implementation class SocioService
 */
@Stateless
public class SocioService implements SocioServiceRemote {

	@EJB 
	private SocioDAO socioDAO;
	@EJB
	private ContratoDAO contratoDAO;
	@EJB
	private NacionalidadDAO nacionalidadDAO;
	@EJB
	private DatoContactoDAO datoContactoDAO;
	@EJB
	private ContratoServiceRemote contratoService;
	
    public SocioService() {
        // TODO Auto-generated constructor stub
    }

    @Override	
    public Integer agregarSocio(String nombre, String apellido, Date fechaNacimiento, 
    		Integer derechoAsiento, String pais,Integer idContrato){
    	NacionalidadDTO nacionalidadDTO = nacionalidadDAO.findNacionalidadByPais(pais);
    	ContratoDTO contratoDTO = contratoDAO.findContratoById(idContrato.longValue());
    	
    	SocioDTO socioDTO = new SocioDTO();
    	socioDTO.setNacionalidad(nacionalidadDTO);
    	socioDTO.setNombre(nombre);
    	socioDTO.setApellido(apellido);
    	socioDTO.setFechaNacimiento(fechaNacimiento);
    	socioDTO.setDerechoAsiento(derechoAsiento);
    	socioDTO.setContrato(contratoDTO);
    	socioDAO.agregar(socioDTO);
    	return (int)socioDTO.getId();    	
    }
    
    @Override	
    public void agregarDatosContacto(List<DatoContactoDTO> datos){
    	for(DatoContactoDTO dato : datos){
    		datoContactoDAO.agregar(dato);
    	}
    }
    @Override	
    public void actualizarSocio(Integer idSocio, String nombre, String apellido, Date fechaNacimiento,
    		Integer derechoAsiento, String pais, Integer idContrato){
    	NacionalidadDTO nacionalidadDTO = nacionalidadDAO.findNacionalidadByPais(pais);
    	ContratoDTO contratoDTO = contratoDAO.findContratoById(idContrato.longValue());
    	
    	SocioDTO socioDTO =  socioDAO.findSocioById(idSocio.longValue());
    	if(nacionalidadDTO!=null)
    		socioDTO.setNacionalidad(nacionalidadDTO);
    	if(nombre!=null)
    		socioDTO.setNombre(nombre);
    	if(apellido!=null)
    		socioDTO.setApellido(apellido);
    	if(fechaNacimiento!=null)
    		socioDTO.setFechaNacimiento(fechaNacimiento);
    	socioDTO.setDerechoAsiento(derechoAsiento);
    	if(contratoDTO!=null)
    		socioDTO.setContrato(contratoDTO);
    	socioDAO.actualizar(socioDTO);
    	  
    }
    @Override	
    public void eliminarSocio(Integer idSocio) throws EliminarSocioException{
    	EliminarSocioException ese = new EliminarSocioException();
    	SocioDTO socioDTO =  socioDAO.findSocioById(idSocio.longValue());
    	if(socioDTO==null){
    		throw ese;
    	}
    	ContratoDTO contratoDTO = socioDTO.getContrato();
    	socioDAO.eliminar(socioDTO);
    	
    	try {
			contratoService.borrarContrato((int)contratoDTO.getId());
		} catch (BorrarContratoException e) {
			e.printStackTrace();
		}  	
    }
}
